// #include <iostream>
//
// using namespace std;
// //c++ 结构体的改变
// //c++类里面能用的结构体都可以
// //继承 多态 在结构体都可以用 运算符重载 构造 析构 静态成员 const 成员
//
// struct Data
// {
//     //可以赋初值
//     //数据成员 --特征
//     int first{88};
//     int second = 3;
//     //可以存在函数
//     //成员函数 --行为
//     void print()
//     {
//         cout << first << "---" << second << endl;
//     }
//
//     //先声明 后实现
//     void print_value();
//
//     //设置类函数
//     void set_first(int data)
//     {
//         first = data;
//     }
//
//     void set_second(int data)
//     {
//         second = data;
//     }
//
//     void set_data(int data1,int data2)
//     {
//         first= data1;
//         second = data2;
//     }
//
// };
//
// void Data::print_value()
// {
//     cout <<"先声明后实现用结构体名::限定" << endl;
// }
//
//
//
// void test_struct()
// {
//     //struct 结构体省略
//     Data data1 = {1,2};
//
//     Data data2;
//
//     cout << data1.first << "---" << data1.second << endl;
//     cout << data2.first << "---" << data2.second << endl;
//     data1.print();
//     data2.print();
//
//     Data* pObject = new Data;
//     pObject->print();
//
//     pObject->print_value();
//     pObject->set_first(1);
//     pObject->set_second(2);
//     pObject->print_value();
// }
//
// int Max(int a,int b)
// {
//     return a >b?a:b;
// }
//
// void test_func()
// {
//     //成员函数指针
//     //怎么去定义函数指针 (* 加指针名) 替换函数名
//     Data* d = new Data;
//     auto pFunc = &Data::print;
//     void (Data::*pFun2)() = &Data::print;
//
//     // d.(*pFunc) //这样写实错的
//     (*d.*pFunc)();
//
//
//     // int(* M)(int a,int b) = &Max;
// }
//
//
// int main()
// {
//
//     // test_struct();
//
//     test_func();
//
//
//
//
//     //怎么通过函数指针调用函数
//
//
//     return 0;
// }